#include <stdio.h>
#include <stdlib.h>

// 题目2：编写一个程序，包含两个函数。第一个函数使用栈内存（局部变量）存储并打印一个整数数组；
// 第二个函数使用堆内存动态分配并存储用户输入的整数数组，然后打印并释放内存。通过这两个函数的
// 调用，展示栈内存和堆内存在使用上的区别。

void func1()
{
    // 栈内存在使用时不需要手动申请与释放，由编译器完成；但要开辟的空间大小在编译时就确定了
    int array[6] = {1, 2, 3, 4, 5, 6};
    for(int i = 0; i < 6; i++)
    {
        printf("%d ", array[i]);
    }
    printf("\n");
}

void func2()
{
    // 堆内存在使用时需要开发者手动申请与释放，否则会导致内存泄漏；但可以根据需要来动态调整分配内存的大小
    int n;
    scanf("%d", &n);
    int* array = (int*)malloc(n * sizeof(int));
    if(array == NULL)
    {
        printf("malloc failed\n");
        exit(1);
    }
    for(int i = 0; i < n; i++)
    {
        scanf("%d", &array[i]);
    }
    for(int i = 0; i < n; i++)
    {
        printf("%d ", array[i]);
    }
    printf("\n");
    free(array);
}

int main()
{
    func1();
    func2();
    return 0;
}